﻿// -------------  Variables Generales -------------------- //
var varCounterTimeOut;
var C_DATE_FMT = 'd/M/y';

// -------------  Funciones Generales -------------------- //
function bandejaModal(url) {
    //   var valRet = window.showModalDialog(url, '',
    //   'dialogHeight:535px; dialogWidth:725px;' +
    //   'edge: Raised; center: Yes; help: No; resizable: No; status: No;');

    var valRet = modalDialog(url, 725, 535)
    return valRet;
}

function modalDialog(url, width, height) {

    var valRet = window.showModalDialog(url, '',
   'dialogHeight: ' + height + 'px; dialogWidth: ' + width + 'px;' +
   'edge: Raised; center: Yes; help: No; resizable: No; status: No;');

    return valRet;
}

function reportWindow(url) {

    var valRet = window.showModalDialog(url, '',
   'dialogHeight:600px; dialogWidth:850px;' +
   'edge: Raised; center: Yes; help: No; resizable: Yes; status: No; maximize: Yes');

    return valRet;
}

function isEmptyControl(id, message) {
    var ctl = document.getElementById(id);
    var blnEmpty = false;

    if (ctl == null) {
        esdAlert('ATENCIÓN', 'El control <' + id + '> no existe', 'atention', false)
        return true;
    }
    switch (ctl.type) {
        case 'text':
        case 'textarea':
        case 'hidden':
        case 'select-one':
            if (ctl.value == '') {
                blnEmpty = true;
                break;
            }
            else {
                switch (ctl.className) {
                    case 'esdNumericTextBox':
                    case 'esdNumericTextBoxDisabled':
                        var dec = parseFloat(ctl.value);
                        if (dec == null) {
                            blnEmpty = true;
                            break;
                        }
                        else {
                            if (dec == 0) {
                                blnEmpty = true;
                                break;
                            }
                            else {
                                blnEmpty = false;
                                break;
                            }
                        }
                        break;
                    default:
                        blnEmpty = false;
                }
            }
            break;
    }

    if (blnEmpty && message != '') {
        esdAlert('ATENCIÓN',message, 'atention', false)
        ctl.focus();
    }

    return blnEmpty;
}

function isEmptyGrid(id, message) {

    var grid = document.getElementById(id);

    var intCount = grid.rows.length;
    if (intCount <= 1) {
        if (message != "")
           AtentionAlert(message);
        return true;
    }

    //Solo si la grilla tiene un emptytemplate
    if (intCount == 2) {
        if (grid.rows[1].cells.length <= 1) {
            if (message != "")
               AtentionAlert(message);
            return true;
        }
    }

    return false;
}

function internalGridResize(id) {
    setTimeout(function () {
        var tblMB = document.getElementById('masterMainBar');

        var mnuTb = document.getElementById('mnuToolbar');
        if (mnuTb == null)
            mnuTb = document.getElementById('ContentPlaceHolder1_mnuToolbar');

        var mnuTbgrid = document.getElementById('mnuGrid');
        if (mnuTbgrid == null)
            mnuTbgrid = document.getElementById('ContentPlaceHolder1_mnuGrid');


        var tblEdit = document.getElementById('TableDataHeader');
        var grid = document.getElementById(id); // $find(id);

        var intMBH = 0;
        var intTBH = 0;
        var intTBGridH = 0;
        var intEditH = 0;
        var intHDif = 0;

        if (tblMB)
            intMBH = tblMB.offsetHeight;

        if (mnuTb)
            intTBH = mnuTb.offsetHeight;

        if (mnuTbgrid)
            intTBGridH = mnuTbgrid.offsetHeight;

        if (tblEdit)
            intEditH = tblEdit.offsetHeight;


        intHDif = $(document).height() - (intEditH + intMBH + intTBH + intTBGridH + 16);

        if (grid) {
            var scrollArea = document.getElementById(grid.id + "_ScrollArea");

            if (scrollArea) {
                //            scrollArea.style.height = (scrollArea.offsetHeight + intHDif) + "px";
                scrollArea.style.height = intHDif + "px";
                var gridempy = document.getElementById("gridempty");
                if (gridempy) {
                    gridempy.style.height = (intHDif - 55) + "px";
                }

            }
            else {
                grid.style.height = (intHDif - 35) + "px";
            }
        }
    }, 1);

}

function MessageOnPostback() {
    var hdnMsgOPB = $get('ContentPlaceHolder1_hdnMsgOPB');

    if (hdnMsgOPB == null)
        return;

    if (hdnMsgOPB.value.length = 0)
        return;

       var arrComp = hdnMsgOPB.value.split(';');
       hdnMsgOPB.value = '';

       if (arrComp.length < 5)
          return;

       //0 -- Titulo
       //1 -- Mensaje
       //2 -- typo
       //3 -- callback
       //4 -- URL
  
      if ((arrComp[4] != '') && (typeof arrComp[4] != 'undefined'))
           location.href = arrComp[4];
       else
           return esdAlert(arrComp[0],arrComp[1],arrComp[2],true);
}

function esdAlert(title, content, type, callback) {
    //0 -- Titulo
    //1 -- Mensaje
    //2 -- typo
    //3 -- callback
    switch (type) {
        case 'error':
            var alertERROR = '<div class="notice"><div class="notice-body-rojo">'
									          + '<img src="../Images/Controls/error.png" alt="" />'
									          + '<h3>' + title + '</h3>'
									          + '<p>' + content + '</p>'
				         + '</div><div class="notice-bottom-rojo"></div></div>';
            $(alertERROR).purr({ usingTransparentPNG: true });
            break;
        case 'atention':
            var alertATENTION = '<div class="notice"><div class="notice-body-naranja">'
									  + '<img src="../Images/Controls/info.png" alt="" />'
									  + '<h3>' + title + '</h3>'
									  + '<p>' + content + '</p>'
		                + '</div><div class="notice-bottom-naranja"></div></div>';
           
            $(alertATENTION).purr({ usingTransparentPNG: true });
            break;
        case 'correct':
            var alertCORRECT = '<div class="notice"><div class="notice-body-verde">'
									  + '<img src="../Images/Controls/correct.png" alt="" />'
									  + '<h3>' + title + '</h3>'
									  + '<p>' + content + '</p>'
		         + '</div><div class="notice-bottom-verde"></div></div>';

            $(alertCORRECT).purr({ usingTransparentPNG: true });
            break;
    }

    return callback;

}

function AtentionAlert(message) {
    var alertATENTION = '<div class="notice"><div class="notice-body-naranja">'
									  + '<img src="../Images/Controls/info.png" alt="" />'
									  + '<h3>ATENCIÓN</h3>'
									  + '<p>' + message + '</p>'
		                + '</div><div class="notice-bottom-naranja"></div></div>';

    $(alertATENTION).purr({ usingTransparentPNG: true });
}

function isValidDate(val, showMessage) {

    if (val == '' || val == '__/__/____' || val == '__/__/____ __:__')
        return true;

    var varRpta = isDate(val.slice(0, 10), C_DATE_FMT);
    if (showMessage & !varRpta) {
       AtentionAlert('La fecha ingresada no es correcta. Ingresela usando el formato: ' + C_DATE_FMT);
        return false;
    }

    if (parseFloat(val.slice(11, 13)) > 23) {
       AtentionAlert('La Hora ingresada no es correcta. Debe ser menor a las 23:59 horas.');
        return false;
    }

    return true;

}

function redirectOnSessionTimeout(sessionTimeout) {

    var varFrame = self.parent.window.frames['headerArea'];

    if (varFrame == null)
        return;

    var varTimeOut = varFrame.document.getElementById('hdnTimeOut');

    if (parseInt(varTimeOut.value) != 0)
        clearTimeout(parseInt(varTimeOut.value));

    var loc = self.parent.window.location;
    var pathName = loc.pathname.substring(0, loc.pathname.lastIndexOf('/') + 1);
    var varUrlBase = loc.href.substring(0, loc.href.length - ((loc.pathname + loc.search + loc.hash).length - pathName.length));

    sessionTimeout = (sessionTimeout * 60 * 1000);
    varTimeOut.value = window.setTimeout("self.parent.window.location.href = '" + varUrlBase + "\wfLogout.aspx'", sessionTimeout);
}

function setInputValue(id, newValue) {
    var ctl = document.getElementById(id);
    ctl.value = newValue;
}

function disableControl(id, state) {
    var ctl = document.getElementById(id);
    ctl.disabled = state;
}

function getGridRowByIndex(id, rowIndex) {
    var grid = document.getElementById(id);
    var row;

    if (grid.rows.length == 0)
        return row;

    var isTH = false;
    if (grid.rows[0].cells[0].nodeName == 'TH')
        isTH = true;

    if (isTH)
        row = grid.rows[parseInt(rowIndex) + 1];
    else
        row = grid.rows[parseInt(rowIndex)];

    return row;
}

function disabledMenuItem(id, index) {
    var ctl = document.getElementById(id);
    var menuLinks = ctl.getElementsByTagName("a");
    menuLinks[index].disabled = true;
}

function gridHasCheckedRows(id, col, message) {

    var grid = document.getElementById(id);

    var intCount = grid.rows.length;
    var intCheck = 0;

    for (var intIdx = 0; intIdx < intCount; intIdx++) {
        var objRow = grid.rows[intIdx];
        if (objRow.cells[0].nodeName == 'TD') {
            var objChk = getChildNodeByType(objRow.cells[col].childNodes, 'checkbox');
            if (objChk.checked)
                intCheck++;
        }

    }

    if (intCheck == 0) {
       AtentionAlert(message);
        return false;
    }

    return true;
}

function getChildNodeByType(nodes, key) {
    for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].type != null)
            if (nodes[i].type = key)
                return nodes[i];
    }

    return null;
}

function isArray(obj) {
    if (obj.constructor.toString().indexOf("Array") == -1)
        return false;
    else
        return true;
}

function gridGetRowByCellValue(id, col, value) {
    var grid = document.getElementById(id);

    var intRows = grid.rows.length;

    for (var i = 0; i < intRows; i++) {
        var row = grid.rows[i];
        if (row.cells[0].nodeName == 'TH')
            continue;

        if (isArray(col) && isArray(value)) {
            var varALen = col.length;
            var varF = 0
            for (var j = 0; j < varALen; j++) {
                if (getObjInnerText(row.cells[col[j]]) == value[j])
                    varF++;
            }
            if (varF == varALen)
                return row;
        }
        else
            if (getObjInnerText(row.cells[col]) == value)
                return row;
    }

    return null;
}

function gridFindCellValueInRow(id, col, value, message) {

    if (isEmptyGrid(id, '')) {
        return false;
    }

    var row = gridGetRowByCellValue(id, col, value)

    if (row != null) {
       AtentionAlert(message);
        return true;
    }

    return false;

}

//-- 14-12-2011
function gridFindCellValueInRow_Prev(id, colEstado, colPrecio, message) {

    if (isEmptyGrid(id, '')) {
        return false;
    }

    var row = ValidaPrecio(id, colEstado, colPrecio)
    if (row != null) {
       AtentionAlert(message);
        return true;
    }

    return false;
}

function ValidaPrecio(id, colEstado, colPrecio) {
    var grid = document.getElementById(id);
    var gridAux = document.getElementById(id);

    var intRows = grid.rows.length;
    for (var i = 0; i < intRows; i++) {
        var row = grid.rows[i];
        if (row.cells[0].nodeName == 'TH')
            continue;

        if (getObjInnerText(row.cells[colEstado]) == '1') //estado 9 
            continue;

        var idPrecioAux = getObjInnerText(row.cells[colPrecio]) //10
        var varf = 0;
        for (var j = 0; j < intRows; j++) {
            var rowAux = gridAux.rows[j];
            if (rowAux.cells[0].nodeName == 'TH')
                continue;

            if (getObjInnerText(rowAux.cells[colEstado]) == '1') // estado 9
                continue;

            var preciorowAux = getObjInnerText(rowAux.cells[colPrecio])
            if (getObjInnerText(rowAux.cells[colPrecio]) != idPrecioAux)
                varf++;

        }
        if (varf > '0')
            return row;
    }

}

function gridFindCellValueInRowNotDisabled(id, col, value, message, stcol) {

    if (isEmptyGrid(id, '')) {
        return false;
    }

    var row = gridGetRowByCellValue(id, col, value)
    if (row != null) {
        if (getObjInnerText(row.cells[stcol]) == 0) {
           AtentionAlert(message);
            return true;
        }
    }
    return false;
}

function getGridRowCount(id) {

    var grid = document.getElementById(id);

    var intCount = grid.rows.length;
    if (intCount <= 1) {
        return 0;
    }

    //Solo si la grilla tiene un emptytemplate
    if (intCount == 2) {
        if (grid.rows[1].cells.length <= 1)
            return 0;
    }

    var varTH = 0;
    if (grid.rows[0].cells[0].nodeName == 'TH')
        varTH = 1;

    return intCount - varTH;
}

function isGridHasAllDeletedRows(id, message, deletedIndex) {

    var grid = document.getElementById(id);
    var intCount = getGridRowCount(id);

    var intRows = grid.rows.length;
    var intRowD = 0;

    for (var i = 0; i < intRows; i++) {
        var row = grid.rows[i];
        if (row.cells[0].nodeName == 'TH')
            continue;

        if (IsGridRowLogicalDeleted(row.cells[deletedIndex]))
            intRowD++;
    }

    if (intRowD == intCount) {
        if (message != '')
           AtentionAlert(message);
        return true;
    };

    return false;
}

function IsGridRowLogicalDeleted(cell) {

    var varStDel = '1,2'
    if (varStDel.indexOf(getObjInnerText(cell)) < 0)
        return false;

    return true;
}

function getObjInnerText(obj) {

    if (typeof obj.textContent != 'undefined')
        return jQuery.trim(obj.textContent);

    return jQuery.trim(obj.innerText);
}

function resizeheader(grdview, grdviewth) {
    var grd = document.getElementById(grdview);
    var grdheader = document.getElementById(grdviewth);
    grdheader.style.width = parseInt(grd.clientWidth) + "px";
    if (grd.rows[0].cells.length != null) {
        if (grd.rows[0].cells.length > 1) {
            for (i = 0; i < grdheader.rows[0].cells.length; i++) {
                grdheader.rows[0].cells[i].style.width = grd.rows[0].cells[i].clientWidth + "px";
            }
        }
    }

}

function updatePanelAnimationUpdating() {
    // get the update progress div
    var updateProgressDiv = $get('updateProgressDiv');

    // make it visible
    updateProgressDiv.style.display = '';

    // get the bounds of both the gridview and the progress div

    var pageBounds = Sys.UI.DomElement.getBounds(document.documentElement);
    var updateProgressDivBounds = Sys.UI.DomElement.getBounds(updateProgressDiv);

    //  center of gridview
    var x = pageBounds.x + Math.round(pageBounds.width / 2) - Math.round(updateProgressDivBounds.width / 2);
    var y = pageBounds.y + Math.round(pageBounds.height / 2) - Math.round(updateProgressDivBounds.height / 2);

    //    set the progress element to this position
    Sys.UI.DomElement.setLocation(updateProgressDiv, x, y);
}

function updatePanelAnimationUpdated() {
    // get the update progress div
    var updateProgressDiv = $get('updateProgressDiv');
    // make it invisible
    updateProgressDiv.style.display = 'none';
}

function disableBackSpace(event) {
    if (typeof window.event != 'undefined') { // ie
        event = window.event;
        event.target = event.srcElement; // make ie confirm to standards !!
    }
    var kc = event.keyCode;
    var tt = event.target.type;
    if ((kc == 8)) {
        if (tt == 'text' || tt == 'textarea') {
            var readOnly = event.target.attributes.getNamedItem('readOnly');
            if (readOnly != null) {
                if (readOnly.value == 'true' || readOnly.value == 'readonly')
                    return false;
                else
                    return true;
            }
            else
                return true;
        }
        else
            return false;
    }
    else
        return true;
}

function disableEnterAndBackSpaceKey(event) {
    var key;
    if (window.event)
        key = window.event.keyCode; //IE
    else
        key = e.which; //firefox

    if (key == 13)
        return false;

    return (disableBackSpace(event));
}

function DateDiff(IntervalType, StartDate, EndDate) {
    var Interval = 0;
    var DevideBy = 1;
    var varDate1 = StartDate;
    var varDate2 = EndDate;

    if (EndDate < StartDate) {
        varDate1 = EndDate
        varDate2 = StartDate
    }

    switch (IntervalType) {
        //date portion      
        case 'd': //add days
            DevideBy = 1000 * 60 * 60 * 24;
            Interval = varDate2 - varDate1;
            Interval = Math.floor(Interval / DevideBy);


            break;
        case 'm': //add months
            var MonthsInFullYear = varDate2.getFullYear() - varDate1.getFullYear();
            if (MonthsInFullYear > 0) {
                MonthsInFullYear = (MonthsInFullYear - 1) * 12;
                Interval = varDate2.getMonth() + (12 - varDate1.getMonth());
                Interval = Interval + MonthsInFullYear
            }
            else {
                Interval = varDate2.getMonth() - varDate2.getMonth();
            }

            break;
        case 'y': //years
            Interval = varDate2.getFullYear() - varDate1.getFullYear();
            break;

        //time portion            
        case 'h': //days
            DevideBy = 1000 * 60 * 60;
            Interval = varDate2 - varDate1;
            Interval = Math.floor(Interval / DevideBy);
            break;
        case 'n': // minutes
            DevideBy = 1000 * 60;
            Interval = varDate2 - varDate1;
            Interval = Math.floor(Interval / DevideBy);
            break;
        case 's': //seconds
            DevideBy = 1000
            Interval = varDate2 - varDate1;
            Interval = Math.floor(Interval / DevideBy);
            break;
    }

    return Interval;
}

//Retorna solo la Fecha de un dato de tipo DateTime
function TruncateDate(startDate) {
    var datTmp = new Date(startDate);

    return new Date(datTmp.getFullYear(), datTmp.getMonth(), datTmp.getDate());
}

function menu_doPostBack(clientID, uniqueID, key) {
    var mnu = document.getElementById(clientID);
    if (mnu.disabled)
        return false;

    mnu.disabled = true;

    __doPostBack(uniqueID, key);
}
// ------------------------------------------------------------------
//  "Agregado para validaciones"
// ------------------------------------------------------------------

var MONTH_NAMES = new Array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre', 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
var DAY_NAMES = new Array('Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado');
function LZ(x) { return (x < 0 || x > 9 ? "" : "0") + x }

// ------------------------------------------------------------------
// isDate ( date_string, format_string )
// Returns true if date string matches format of format string and
// is a valid date. Else returns false.
// It is recommended that you trim whitespace around the value before
// passing it to this function, as whitespace is NOT ignored!
// ------------------------------------------------------------------
function isDate(val, format) {
    var date = getDateFromFormat(val, format);
    if (date == 0) { return false; }
    return true;
}

// -------------------------------------------------------------------
// compareDates(date1,date1format,date2,date2format)
//   Compare two date strings to see which is greater.
//   Returns:
//   1 if date1 is greater than date2
//   0 if date2 is greater than date1 of if they are the same
//  -1 if either of the dates is in an invalid format
// -------------------------------------------------------------------
function compareDates(date1, dateformat1, date2, dateformat2) {
    var d1 = getDateFromFormat(date1, dateformat1);
    var d2 = getDateFromFormat(date2, dateformat2);
    if (d1 == 0 || d2 == 0) {
        return -1;
    }
    else if (d1 > d2) {
        return 1;
    }
    return 0;
}

// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(date, format) {
    format = format + "";
    var result = "";
    var i_format = 0;
    var c = "";
    var token = "";
    var y = date.getYear() + "";
    var M = date.getMonth() + 1;
    var d = date.getDate();
    var E = date.getDay();
    var H = date.getHours();
    var m = date.getMinutes();
    var s = date.getSeconds();
    var yyyy, yy, MMM, MM, dd, hh, h, mm, ss, ampm, HH, H, KK, K, kk, k;
    // Convert real date parts into formatted versions
    var value = new Object();
    if (y.length < 4) { y = "" + (y - 0 + 1900); }
    value["y"] = "" + y;
    value["yyyy"] = y;
    value["yy"] = y.substring(2, 4);
    value["M"] = M;
    value["MM"] = LZ(M);
    value["MMM"] = MONTH_NAMES[M - 1];
    value["NNN"] = MONTH_NAMES[M + 11];
    value["d"] = d;
    value["dd"] = LZ(d);
    value["E"] = DAY_NAMES[E + 7];
    value["EE"] = DAY_NAMES[E];
    value["H"] = H;
    value["HH"] = LZ(H);
    if (H == 0) { value["h"] = 12; }
    else if (H > 12) { value["h"] = H - 12; }
    else { value["h"] = H; }
    value["hh"] = LZ(value["h"]);
    if (H > 11) { value["K"] = H - 12; } else { value["K"] = H; }
    value["k"] = H + 1;
    value["KK"] = LZ(value["K"]);
    value["kk"] = LZ(value["k"]);
    if (H > 11) { value["a"] = "PM"; }
    else { value["a"] = "AM"; }
    value["m"] = m;
    value["mm"] = LZ(m);
    value["s"] = s;
    value["ss"] = LZ(s);
    while (i_format < format.length) {
        c = format.charAt(i_format);
        token = "";
        while ((format.charAt(i_format) == c) && (i_format < format.length)) {
            token += format.charAt(i_format++);
        }
        if (value[token] != null) { result = result + value[token]; }
        else { result = result + token; }
    }
    return result;
}

// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val) {
    var digits = "1234567890";
    for (var i = 0; i < val.length; i++) {
        if (digits.indexOf(val.charAt(i)) == -1) { return false; }
    }
    return true;
}
function _getInt(str, i, minlength, maxlength) {
    for (var x = maxlength; x >= minlength; x--) {
        var token = str.substring(i, i + x);
        if (token.length < minlength) { return null; }
        if (_isInteger(token)) { return token; }
    }
    return null;
}

// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the 
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val, format) {
    val = val + "";
    format = format + "";
    var i_val = 0;
    var i_format = 0;
    var c = "";
    var token = "";
    var token2 = "";
    var x, y;
    var now = new Date();
    var year = now.getYear();
    var month = now.getMonth() + 1;
    var date = 1;
    var hh = now.getHours();
    var mm = now.getMinutes();
    var ss = now.getSeconds();
    var ampm = "";

    while (i_format < format.length) {
        // Get next token from format string
        c = format.charAt(i_format);
        token = "";
        while ((format.charAt(i_format) == c) && (i_format < format.length)) {
            token += format.charAt(i_format++);
        }
        // Extract contents of value based on format token
        if (token == "yyyy" || token == "yy" || token == "y") {
            if (token == "yyyy") { x = 4; y = 4; }
            if (token == "yy") { x = 2; y = 2; }
            if (token == "y") { x = 2; y = 4; }
            year = _getInt(val, i_val, x, y);
            if (year == null) { return 0; }
            i_val += year.length;
            if (year.length == 2) {
                if (year > 70) { year = 1900 + (year - 0); }
                else { year = 2000 + (year - 0); }
            }
        }
        else if (token == "MMM" || token == "NNN") {
            month = 0;
            for (var i = 0; i < MONTH_NAMES.length; i++) {
                var month_name = MONTH_NAMES[i];
                if (val.substring(i_val, i_val + month_name.length).toLowerCase() == month_name.toLowerCase()) {
                    if (token == "MMM" || (token == "NNN" && i > 11)) {
                        month = i + 1;
                        if (month > 12) { month -= 12; }
                        i_val += month_name.length;
                        break;
                    }
                }
            }
            if ((month < 1) || (month > 12)) { return 0; }
        }
        else if (token == "EE" || token == "E") {
            for (var i = 0; i < DAY_NAMES.length; i++) {
                var day_name = DAY_NAMES[i];
                if (val.substring(i_val, i_val + day_name.length).toLowerCase() == day_name.toLowerCase()) {
                    i_val += day_name.length;
                    break;
                }
            }
        }
        else if (token == "MM" || token == "M") {
            month = _getInt(val, i_val, token.length, 2);
            if (month == null || (month < 1) || (month > 12)) { return 0; }
            i_val += month.length;
        }
        else if (token == "dd" || token == "d") {
            date = _getInt(val, i_val, token.length, 2);
            if (date == null || (date < 1) || (date > 31)) { return 0; }
            i_val += date.length;
        }
        else if (token == "hh" || token == "h") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 1) || (hh > 12)) { return 0; }
            i_val += hh.length;
        }
        else if (token == "HH" || token == "H") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 0) || (hh > 23)) { return 0; }
            i_val += hh.length;
        }
        else if (token == "KK" || token == "K") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 0) || (hh > 11)) { return 0; }
            i_val += hh.length;
        }
        else if (token == "kk" || token == "k") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 1) || (hh > 24)) { return 0; }
            i_val += hh.length; hh--;
        }
        else if (token == "mm" || token == "m") {
            mm = _getInt(val, i_val, token.length, 2);
            if (mm == null || (mm < 0) || (mm > 59)) { return 0; }
            i_val += mm.length;
        }
        else if (token == "ss" || token == "s") {
            ss = _getInt(val, i_val, token.length, 2);
            if (ss == null || (ss < 0) || (ss > 59)) { return 0; }
            i_val += ss.length;
        }
        else if (token == "a") {
            if (val.substring(i_val, i_val + 2).toLowerCase() == "am") { ampm = "AM"; }
            else if (val.substring(i_val, i_val + 2).toLowerCase() == "pm") { ampm = "PM"; }
            else { return 0; }
            i_val += 2;
        }
        else {
            if (val.substring(i_val, i_val + token.length) != token) { return 0; }
            else { i_val += token.length; }
        }
    }
    // If there are any trailing characters left in the value, it doesn't match
    if (i_val != val.length) { return 0; }
    // Is date valid for month?
    if (month == 2) {
        // Check for leap year
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { // leap year
            if (date > 29) { return 0; }
        }
        else { if (date > 28) { return 0; } }
    }
    if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
        if (date > 30) { return 0; }
    }
    // Correct hours value
    if (hh < 12 && ampm == "PM") { hh = hh - 0 + 12; }
    else if (hh > 11 && ampm == "AM") { hh -= 12; }
    var newdate = new Date(year, month - 1, date, hh, mm, ss);
    return newdate.getTime();
}

// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d   MMM d, y   MMM d,y   y-MMM-d   d-MMM-y  MMM d
// M/d/y   M-d-y      M.d.y     MMM-d     M/d      M-d
// d/M/y   d-M-y      d.M.y     d-MMM     d/M      d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------
function parseDate(val) {
    var preferEuro = (arguments.length == 2) ? arguments[1] : false;
    generalFormats = new Array('y-M-d', 'MMM d, y', 'MMM d,y', 'y-MMM-d', 'd-MMM-y', 'MMM d');
    monthFirst = new Array('M/d/y', 'M-d-y', 'M.d.y', 'MMM-d', 'M/d', 'M-d');
    dateFirst = new Array('d/M/y', 'd-M-y', 'd.M.y', 'd-MMM', 'd/M', 'd-M');
    var checkList = new Array('generalFormats', preferEuro ? 'dateFirst' : 'monthFirst', preferEuro ? 'monthFirst' : 'dateFirst');
    var d = null;
    for (var i = 0; i < checkList.length; i++) {
        var l = window[checkList[i]];
        for (var j = 0; j < l.length; j++) {
            d = getDateFromFormat(val, l[j]);
            if (d != 0) { return new Date(d); }
        }
    }
    return null;

}

function AddFilter(idControl, idOperador, idControlValue, idControlToken, title, Identity) {
    var selectedItem = document.getElementById(idOperador);
    var control = document.getElementById(idControlValue);
    var idfilter = ""

    if (selectedItem.value == 'like') {
        idfilter = (Identity + " " + selectedItem.value + " '%" + control.value + "%' ")
    }
    else {
        idfilter = (Identity + " " + selectedItem.value + " '" + control.value + "' ")
    }

    var TextControl = "";

    switch (control.type) {
        case 'text':
            TextControl = control.value;
            break;
        case 'select-one':
            TextControl = control.options[control.selectedIndex].text;
            break;
    }

    $("#" + idControlToken).tokenInput("add", { id: idfilter, name: "[" + title + "] " + selectedItem.options[selectedItem.selectedIndex].text + " '" + TextControl + "'" });


    $("#" + idControl).dialog("close");
    return false;

}
